SQL Serverのテーブルのカラムの型を動的管理ビューから取得する
code:sql
select
s.name as schema_name
, t.name as table_name
, c.name as column_name
, tp.name as type
, case tp.name
when 'varchar' then '(' + convert(varchar, c.max_length) + ')'
when 'nvarchar' then '(' + convert(varchar, c.max_length) + ')'
when 'char' then '(' + convert(varchar, c.max_length) + ')'
when 'nchar' then '(' + convert(varchar, c.max_length) + ')'
else ''
end
, case tp.is_nullable
when 1 then 'null'
else 'not null'
end
-- , kc.name as primary_key
from
sys.schemas as s
left join sys.tables as t on
s.schema_id = t.schema_id
left join sys.columns as c on
t.object_id = c.object_id
left join sys.types as tp on
c.system_type_id = tp.system_type_id
-- left join sys.indexes as i on
-- t.object_id = i.object_id
-- left join sys.index_columns as ic on
-- i.object_id = ic.object_id
-- and i.index_id = ic.index_id
-- left join sys.key_constraints as kc on
-- t.object_id = kc.parent_object_id
where
s.name = 'dbo'
and t.name like 'sample%テーブル';
書き直した
code:sql
SELECT
s.name AS schema_name
, t.name AS table_name
, c.name AS column_name
, ty.name AS type_name
FROM
sys.schemas s
, sys.tables t
, sys.columns c
, sys.types ty
WHERE
s.schema_id = t.schema_id
AND t.object_id = c.object_id
AND c.system_type_id = ty.system_type_id
AND c.user_type_id = ty.user_type_id;
table:result.csv
schema_name table_name column_name type_name
dbo testテーブル 年齢 int
dbo testテーブル 更新日 datetime
dbo testテーブル 備考 varchar
あった
system_type_id tinyint 列のシステム型の ID。
user_type_id int ユーザーが定義した列の型の ID です。
型の名前を返すには、この列で sys.typesカタログ ビューに結合します。
code:カラム取得.sql
SELECT
s.name AS s_name
, t.name AS t_name
, c.*
FROM
sys.schemas s
, sys.tables t
, sys.columns c
WHERE
s.schema_id = t.schema_id
AND t.object_id = c.object_id;
table:result.csv
s_name t_name object_id name column_id system_type_id user_type_id 以下略
dbo testテーブル 19999999 サンプル列 1 56 56 以下略
全部同じだった
56の型はintだった
code:型一覧取得.sql
SELECT * FROM sys.types;
table:result.csv
name system_type_id user_type_id
略
int 56 56
略
ログ
使った(2020/02/12)